<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   
      <link rel="stylesheet" href="helpwin.css">
      <title>MATLAB File Help: mat2wfdb</title>
   </head>
   <body>
      <!--Single-page help-->
      <table border="0" cellspacing="0" width="100%">
         <tr class="subheader">
            <td class="headertitle">MATLAB File Help: mat2wfdb</td>
            <td class="subheader-left"><a href="mat2wfdb.m">View code for mat2wfdb</a></td>
            <td class="subheader-right"><a href="Contents.html">WFDB Contents</a></td>
         </tr>
      </table>
      <div class="title">mat2wfdb</div>
      <div class="helptext"><pre><!--helptext -->


function [varargout]=mat2wfdb(varargin)

 [xbit]=mat2wfdb(X,fname,Fs,bit_res,adu,info,gain,sg_name,baseline,isint)

 Convert data readable in matlab into WFDB Physionet format.

 Input Paramater are:

 X       -(required)  NxM matrix of M signals with N samples each. The
                      signals can be of type double.The signals are assumed to be
                      in physical units already and will be converted to
                      ADU.
 fname   -(required)  String where the the header (*.hea) and data (*.dat)
          files will be saved (one single name for both, with no sufix).
 Fs      -(Optional)  1x1 sampling frequency in Hz (all signals must have
          been sampled at the same frquency). Default is 1 Hz.
 bit_res -(Optional)  1xM (or Mx1):scalar determining the bit depth of the conversion for
                      each signal.
                      1x1 : If all the signals should have the same bit depth
          Options are: 8,  16, and 32 ( all are signed types). 16 is the default.
 adu     -(Optional)  Cell array of strings describing the physical units (default is 'V').
          If only one string is entered all signals will have the same physical units.
          If multiple physical units, the total units entered has to equal M (number of
          channels). Units are delimited by '/'. See examples below.
 info    -(Optional)  String that will be added to the comment section of the header file.
 gain    -(Optional) Scalar, if provided, no automatic scaling will be applied before the
          quantitzation of the signal. If a gain is passed,  in will be the same one set
          on the header file. The signal will be scaled by this gain prior to the quantization
          process. Use this options if you want to have a standard gain and quantization
          process for all signals in a dataset (the function will not attempt to quantitized
          individual waveforms based on their individual range and baseline).
baseline   -(Optional) Offset (ADC zero) Mx1 array of integers that represents the amplitude (sample
           value) that would be observed if the analog signal present at the ADC inputs had a
           level that fell exactly in the middle of the input range of the ADC.
 sg_name -(Optional) Cell array of strings describing signal names.

 isint  -(Optional) Logical value (default=0). Use this option if you know
           the signal is already quantitized, and you want to remove round-off
           error by setting the original values to integers prior to fixed
           point conversion.

 Ouput Parameters are:

 xbit    -(Optional)  NxM the quantitized signals that written to file (possible
          rescaled if no gain was provided at input). Useful for comparing
          and estimating quatitization error with the input double signal X
          (see examples below).


  NOTE: The signals can have different amplitudes, they will all be scaled to
  a reference gain, with the scaling factor saved in the *.hea file.

Written by Ikaro Silva 2010
Modified by Louis Mayaud 2011
 Version 1.0

 Since 0.0.1
 See also wrsamp, wfdbdesc

%%%%%%%%%  Example 1 %%%%%%%%%%%%

 display('***This example will write a  Ex1.dat and Ex1.hea file to your current directory!')
 s=input('Hit "ctrl + c" to quit or "Enter" to continue!');

 %Generate 3 different signals and convert them to signed 16 bit in WFDB format
 clear all;clc;close all
 N=1024;
 Fs=48000;
 tm=[0:1/Fs:(N-1)/Fs]';
 adu='V/mV/V';
 info='Example 1';


 %First signal a ramp with 2^16 unique levels and is set to (+-) 2^15 (Volts)
 %Thus the header file should have one quant step equal to (2^15-(-2^15))/(2^16) V.
 sig1=double(int16(linspace(-2^15,2^15,N)'));

 %Second signal is a sine wave with 2^8 unique levels and set to (+-) 1 (mV)
 %Thus the header file should one quant step equal a (1--1)/(2^16)  adu step
 sig2=double(int8(sin(2*pi*tm*1000).*(2^7)))./(2^7);

 %Third signal is a random binary signal set to to (+-) 1 (V) with DC (to be discarded)
 %Thus the header file should have one quant step equal a 1/(2^16) adu step.
 sig3=(rand(N,1) > 0.97)*2 -1 + 2^16;

 %Concatenate all signals and convert to WFDB format with default 16 bits (empty brackets)
 sig=[sig1 sig2 sig3];
 mat2wfdb(sig,'Ex1',Fs,[],adu,info)

 % %NOTE: If you have WFDB installed you can check the conversion by
 % %uncomenting and this section and running (notice that all signals are scaled
 % %to unit amplitude during conversion, with the header files keeping the gain info):

 % !rdsamp -r Ex1 > foo
 % x=dlmread('foo');
 % subplot(211)
 % plot(sig)
 % subplot(212)
 % plot(x(:,1),x(:,2));hold on;plot(x(:,1),x(:,3),'k');plot(x(:,1),x(:,4),'r')

%%%%%%% End of Example 1%%%%%%%%%
</pre></div><!--after help -->
   </body>
</html>
